#include <vector>
#include <unordered_set>
#include <queue>
#include "../9.2-Graph/02-graph_adj_list.h"

using namespace std;

/* 广度优先遍历 BFS */
// 使用邻接表来表示图，以便获取指定顶点的所有邻接顶点
vector<Vertex*> graphBFS(GraphAdjList &graph, Vertex *startVet) {
    vector<Vertex*> res;
    unordered_set<Vertex*> visited = { startVet };
    queue<Vertex*> que;
    que.push(startVet);
    while (!que.empty()) {
        Vertex *vet = que.front();
        que.pop();
        res.push_back(vet);
        for (auto adjVet : graph.adjList[vet]) {
            if (visited.count(adjVet))
                continue;
            que.push(adjVet);
            visited.emplace(adjVet);
        }
    }
    return res;
}
